package com.wwmz.pattern.singleton.destroy;

/**
 * Created by wumz on 2020/9/17 10:10
 */
/*
   加载类就是加载ClassPath : LazyStaticInnerClassSingleton.class
              LazyStaticInnerClassSingleton$LazyHolder.class
   优点：写法优雅，利用了Java本身语法特点，性能高，避免了内存浪费,不能被反射破坏
   缺点：不优雅
 */
public class LazyStaticInnerClassSingleton {

    //使用LazyStaticInnerClassSingleton的时候，默认会先初始化内部类
    private LazyStaticInnerClassSingleton(){
        if (LazyHolder.INSTANCE != null){
            throw new RuntimeException("不允许创建多个实例");
        }
    }

    //static关键字是为了空间共享，保证这个方法不会被重写、重载
    public static LazyStaticInnerClassSingleton getInstance(){
        //返回结果之前，一定先加载内部类
        return LazyHolder.INSTANCE;
    }

    //默认不加载
    private static class LazyHolder{
        private static final LazyStaticInnerClassSingleton INSTANCE = new LazyStaticInnerClassSingleton();
    }
}
